<!-- saved from url=(0014)about:internet --><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
<html>
<!-- Standard Head Part -->
<head>
<title>NUnit - TestcaseProviders</title>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<meta http-equiv="Content-Language" content="en-US">
<link rel="stylesheet" type="text/css" href="nunit.css">
<link rel="shortcut icon" href="favicon.ico">
</head>
<!-- End Standard Head Part -->

<body>

<!-- Standard Header for NUnit.org -->
<div id="header">
  <a id="logo" href="http://www.nunit.org"><img src="img/logo.gif" alt="NUnit.org" title="NUnit.org"></a>
  <div id="nav">
    <a href="http://www.nunit.org">NUnit</a>
    <a class="active" href="index.html">Documentation</a>
  </div>
</div>
<!-- End of Header -->

<div id="content">

<h3>TestCaseProviders (NUnit 2.5)</h3>

<h4>Purpose</h4>
<p>TestCaseProviders are used with parameterized tests to provide the
specific test cases that will be used in calling the test.

<h4>Extension Point</h4>
<p>Addins use the host to access this extension point by name:

<pre>
	IExtensionPoint listeners = host.GetExtensionPoint( "ParameterProviders" );</pre>

<h4>Interface</h4>
<p>The extension object passed to Install must implement either the 
   <b>ITestCaseProvider</b> or the <b>ITestCaseProvider2</b> interface:

<pre>
	public interface ITestCaseProvider
	{
		bool HasTestCasesFor( MethodInfo method );
		IEnumerable GetTestCasesFor( MethodInfo method );
	}
	
	public interface ITestCaseProvider2 : ITestCaseProvider
	{
		bool HasTestCasesFor( MethodInfo method, Test suite );
		IEnumerable GetTestCasesFor( MethodInfo method, Test suite );
	}
</pre>

<p>NUnit will call <b>ITestCaseProvider2</b> if it is available. Otherwise
   <b>ITestCaseProvider</b> will be used.

<p><b>HasTestCasesFor</b> should return true if the provider is able to supply test cases
   for the specified method. If a provider only wants to be used on certain types 
   of tests, it can examine the provided MethodInfo and the suite for which the
   test is being constructed and return true or false based on what it finds.

<p>The GetParametersFor method should return a list of individual test cases.
   Each test case may be expressed as a ParameterSet, as an array of arguments
   or as a custom object containing one or more of the following properties:
   
   <ul>
   <li>Arguments
   <li>RunState
   <li>NotRunReason
   <li>ExpectedExceptionType
   <li>ExpectedExceptionName
   <li>ExpectedExceptionMessage
   <li>Result
   <li>Description
   <li>TestName
   </ul>

<p>The ParameterSet class provides all these properties and may be used
to avoid the overhead of reflecting on the properties.

<h4>Notes:</h4>

<ol>
<li>Most providers will delegate one of the interface implementations
    to the other if they implement both.
<li>TestCaseProviders that use data from the fixture class should use 
    <b>ITestCaseProvider2</b> interface so that they are able to access any 
	arguments supplied for constructing the fixture object.
<li>Providers that acquire data from outside the fixture will usually
    be able to work with <b>ITestCaseProvider</b> alone.
<li>The <b>ITestCaseProvider2</b> interface was added in the NUnit 2.5.1 release.
</ol>
   

</div>

<!-- Submenu -->
<div id="subnav">
<ul>
<li><a href="index.html">NUnit 2.5.10</a></li>
<ul>
<li><a href="getStarted.html">Getting&nbsp;Started</a></li>
<li><a href="assertions.html">Assertions</a></li>
<li><a href="constraintModel.html">Constraints</a></li>
<li><a href="attributes.html">Attributes</a></li>
<li><a href="runningTests.html">Running&nbsp;Tests</a></li>
<li><a href="extensibility.html">Extensibility</a></li>
<ul>
<li><a href="customConstraints.html">Custom&nbsp;Constraints</a></li>
<li><a href="nunitAddins.html">NUnit&nbsp;Addins</a></li>
<ul>
<li><a href="suiteBuilders.html">SuiteBuilders</a></li>
<li><a href="testcaseBuilders.html">TestcaseBuilders</a></li>
<li><a href="testDecorators.html">TestDecorators</a></li>
<li id="current"><a href="testcaseProviders.html">TestcaseProviders</a></li>
<li><a href="datapointProviders.html">DatapointProviders</a></li>
<li><a href="eventListeners.html">EventListeners</a></li>
</ul>
<li><a href="extensionTips.html">Tips&nbsp;for&nbsp;Extenders</a></li>
</ul>
<li><a href="releaseNotes.html">Release&nbsp;Notes</a></li>
<li><a href="samples.html">Samples</a></li>
<li><a href="license.html">License</a></li>
</ul>
</ul>
</div>
<!-- End of Submenu -->


<!-- Standard Footer for NUnit.org -->
<div id="footer">
  Copyright &copy; 2010 Charlie Poole. All Rights Reserved.
</div>
<!-- End of Footer -->

</body>
</html>
